package com.gmcc.aiquality.common.flow.service;

import com.gmcc.aiquality.common.core.base.service.IBaseService;
import com.gmcc.aiquality.common.flow.model.FlowDelegateUser;

import java.util.List;

/**
 * 流程委托用户数据操作服务接口。
 *
 * @author 孙先生
 * @date 2025-10-23
 */
public interface FlowDelegateUserService extends IBaseService<FlowDelegateUser, Long> {

    /**
     * 保存新增对象。
     *
     * @param flowDelegateUser 新增对象。
     * @return 返回新增对象。
     */
    FlowDelegateUser saveNew(FlowDelegateUser flowDelegateUser);

    /**
     * 更新数据对象。
     *
     * @param flowDelegateUser         更新的对象。
     * @param originalFlowDelegateUser 原有数据对象。
     * @return 成功返回true，否则false。
     */
    boolean update(FlowDelegateUser flowDelegateUser, FlowDelegateUser originalFlowDelegateUser);

    /**
     * 删除指定数据。
     *
     * @param id 主键Id。
     * @return 成功返回true，否则false。
     */
    boolean remove(Long id);

    /**
     * 获取流程委托列表。
     *
     * @param orderBy 排序参数。
     * @return 列表。
     */
    List<FlowDelegateUser> getFlowDelegateUserList(String orderBy);

    /**
     * 被委托人更新委托确认状态。
     *
     * @param delegateId    委托Id。
     * @param confirmStatus 确认状态。
     */
    void updateDeletegatedUserConfirm(Long delegateId, Integer confirmStatus);

    /**
     * 获取我的被委托列表。
     *
     * @param processDefinitionKey 流程定义标识。
     * @param effective            是否包含有效代理数据。
     * @return 列表。
     */
    List<FlowDelegateUser> getFlowDelegateUserListByMyUserId(String processDefinitionKey, boolean effective);

    /**
     * 判断当前用户是否是当前流程的委托用户。
     *
     * @param processDefinitionKey 流程定义标识。
     * @param delegateUserId       委托用户Id。
     * @return true表示有效，false表示无效。
     */
    boolean isEffectiveDelegate(String processDefinitionKey, Long delegateUserId);
}